home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 352_01 / strppnox.cpp < prev    next >
C/C++ Source or Header  |  1991-04-28  |  1KB  |  58 lines

  1. // STRPPNOX.CPP        contains String::noExtra() 
  2. //        remove extra chars from string.  
  3. //        chars are extra if they occur twice or more in a consecutive run.
  4. //
  5. #include <stdlib.h>
  6. #include <string.h> 
  7.  
  8. #include "dblib.h"
  9.  
  10.  
  11. String& String::noExtra (char *tok)
  12.     {
  13.     char *lag = s;        // ptr to remaining part of string
  14.     if ( lag==NULL || tok==NULL ) return *this;
  15.  
  16.     char *lead=lag;        // ptr to exploring part of string
  17.     int  ntok = strlen(tok);
  18.     int  offset =0;
  19.     char ctok = tok[0];    // first char from tok string.
  20.     char c;                // character to examine.
  21.     int  keep_one =0;    // flag that we are waiting for first char of a run
  22.  
  23.         
  24.     for ( ; *lead; ++lead)
  25.         {
  26.         c = *lead;
  27.         if ( -1 == String::findchr ( tok, ntok, c )  )
  28.             {
  29.             /* character at p is not contained in s2, 
  30.              *    so copy it to s and move offset for lagging ptr up one.
  31.              */
  32.             lag[offset++] = c;
  33.             keep_one = 1;    // keep next char from tok that we find.
  34.             }
  35.         else
  36.             {
  37.             if ( keep_one )
  38.                 {
  39.                 // first char in tok from a possible run
  40.                 lag[offset++] = ctok;    // replace it with first char from tok.    
  41.                 keep_one = 0;             // don't keep any more.
  42.                 } 
  43.             keep_one = 0;        // don't keep any more.
  44.             }
  45.         }
  46.         
  47.     n = offset;
  48.     lag[offset] =0;
  49.  
  50.     if ( offset == 0 )
  51.         {
  52.         // entire string was squeezed, 
  53.         destruct();
  54.         }
  55.  
  56.     return  *this; // String::noExtra() 
  57.     }
  58.